package es.decloud.webapp.action;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import org.primefaces.event.SelectEvent;
import org.primefaces.model.DefaultScheduleEvent;

import es.decloud.model.Centro;
import es.decloud.model.Direccion;
import es.decloud.service.CentroManager;
  


@ManagedBean
@RequestScoped
public class CentroAction extends BasePage implements Serializable {

	private static final long serialVersionUID = -3856967825498958029L;

	@ManagedProperty(value = "#{centroManager}")
	private CentroManager centroManager;

	private Centro centro;
	private Long idCentro;
	

	/*** Propiedades de para hibernate Search ***/
	private String query;

	/*** getters y setters. Inicio ***/
	public void setCentroManager(CentroManager centroManager) {
		this.centroManager = centroManager;
	}

	public Centro getCentro() {
		if (centro == null) {
			centro = new Centro();
			centro.setAccountExpired(Boolean.FALSE);
			centro.setAccountLocked(Boolean.FALSE);
			centro.setDireccion(new Direccion());

		}
		return centro;
	}

	public void setCentro(Centro centro) {
		this.centro = centro;
	}

	public void setQuery(String query) {
		this.query = query;
	}

	public String getQuery() {
		return query;
	}
	

	public Long getIdCentro() {
		return idCentro;
	}

	public void setIdCentro(Long idCentro) {
		this.idCentro = idCentro;
	}
	
	/*** getters y setters. Fin ***/
	
	/*** Constructores ***/
	public CentroAction() {
		setSortColumn("nombre");
	}

	/*** Metodos de Negocio. Inicio ***/
	@SuppressWarnings("unchecked")
	public List<Centro> getCentrosList() {
		return sort(centroManager.getAll());
	}

	public String centroDetalle() {
				
		if (idCentro != null) {
			centro = centroManager.get(idCentro);
		}
		
		if(centro == null){
			addError("No existen datos para el Centro con id: " + idCentro);
		}
		
		return "centroDetalle"; // redirigimos a centroDetalle.xhtml
	}
	
	public String centroRemove() {
		
		if (centro != null && centro.getId() != null) {
			
			try {
				centroManager.remove(centro.getId());
				addMessage("centro.deleted");
			} catch (Exception e) {
				
				addError("centro.error.deleted");
			}
		}else{
			addError("centro.error.noData");
		}
		
		return "centroList"; // redirigimos a centroList.xhtml
	}

	public String centroSave() {
				
		try {
			// Centro con id, entonces update
			// Centro sin id, entonces insert
			centroManager.saveCentro(centro);
			
			addMessage("operacion.succeeded");

		} catch (Exception e) {
			addError("centro.error.save");
		}
		
		
		return "centroDetalle"; // redirigimos a centroDetalle.xhtml
	}
	

	
	/*** Metodos de Negocio. Fin ***/

	/*** Metodos Private. Inicio ***/
	/*** Metodos Private. Fin ***/

	/*** Metodos usados para HibernateSearch.Inicio ***/
	public List getCentros() {
		// try {
		// return sort(centroManager.search(query));
		// } catch (SearchException se) {
		// addError(se.getMessage());
		// return sort(centroManager.search(query));
		// }
		return null;
	}

	public String search() {
		return "centroList";// redirigirá a centroList.xhtml
	}

	/*** Metodos usados para HibernateSearch.Fin ***/

}
